home *** CD-ROM | disk | FTP | other *** search
/ Shareware Games Galore! / Shareware Games Galore!.iso / arcade / gameser5 / chess.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  15.6 KB  |  372 lines

  1. 0  ' exit on error
  2. 1  CLEAR ,,2048:KEY OFF
  3. 2  CLS:COLOR 0,7:LOCATE 1,6:PRINT SPACE$(68)
  4. 3  LOCATE 2,6:PRINT" ********* Chess *********   By: M. C. Rakaska, Ides of March, 1980 "
  5. 4  LOCATE 3,6:PRINT SPACE$(68):LOCATE 4,6:PRINT"      Adapted for the IBM PC by  S. W. Huggins, December, 1981      "
  6. 5  LOCATE 5,6:PRINT SPACE$(68)
  7. 6  LOCATE 6,6:PRINT"                   <D-o-w-n-l-o-a-d-e-d  F-r-o-m>                   "
  8. 12  LOCATE 7,6:PRINT SPACE$(68):LOCATE 8,6:PRINT"  PC-NET #1 of Denver, Co.   303-773-2699 or Voice at 303-694-9038  "
  9. 13  LOCATE 9,6:PRINT SPACE$(68)
  10. 20  DEFINT A-Z:A=0:B=0:X=0:Y=0:S=0:A0=0:T=0:A8=0:A1=0:A2=0:A3=0:A4=0:B1=0:B6!=0:           H=0:M=0:N=0:P=0:W=0:A5=0:I=1
  11. 22  DIM C(64), A(10,10), B(10,10), T(10,10), S(8,8)
  12. 25  COLOR 7,0:LOCATE 18,1:PRINT"Important:  Use Caps Lock key to shift to UPPER CASE before continuing...."
  13. 30  LOCATE 21,1:INPUT "DO YOU WANT INSTRUCTIONS ";IN$:IN$=LEFT$(IN$,1):             IF IN$="Y" THEN GOSUB 2220
  14. 40  CL$="N"
  15. 50  CLS:INPUT "YOUR NAME IS ";B$:IF B$="" THEN B$=" HUMAN " ELSE B$=LEFT$(B$,9)
  16. 60  CLS:PRINT "LEVEL OF PLAY";:INPUT B8!:IF B8!=0 THEN B8!=1:B7!=1+RND(0)/2:ELSE    B7!=(B8!+1)/2+RND(0)/2
  17. 70  CLS:PRINT "DO YOU WANT WHITE ";B$;" ";:INPUT C$:GOSUB 790:IF LEFT$(C$,1)<>"N"   THEN GOSUB 900:GOTO 190
  18. 80  GOSUB 890:IF CL$="Y" THEN LOCATE 25,6,0:                                        PRINT "START ";TIME$;
  19. 100  F!=-99:A0=0:FOR J=1 TO 8:FOR K=1 TO 8:IF A(J,K)=99 THEN A6=J:A7=K
  20. 110  NEXT:NEXT
  21. 120  FOR X=1 TO 8:FOR Y=1 TO 8:IF A(X,Y)<0 THEN GOSUB 270:                           IF F!>=B7! THEN GOTO 150
  22. 130  NEXT:NEXT:IF F!>=-9 THEN GOTO 150 ELSE GOSUB 900
  23. 140  LOCATE 25,62,0: PRINT "I CONCEED    ";:GOTO 2190
  24. 150  A(R,U)=A(E,Q):A(E,Q)=1:IF A(R,U)=-2 AND U=1 THEN A(R,U)=-9
  25. 160  X=R:Y=U:A0=4:GOSUB 270:LOCATE 25,62,0:PRINT "IS MY MOVE    ";:                  LOCATE 25,51,0:PRINT CHR$(E+64);Q;"- "CHR$(R+64);U;
  26. 170  IF CL$="Y" THEN LOCATE 25,31,0:PRINT "STOP ";TIME$;
  27. 180  X=E:Y=Q:GOSUB 910:X=R:Y=U:GOSUB 910:IF C=1 THEN LOCATE 24,1,1:                  PRINT "CHECK ";:C=0 ELSE LOCATE 24,1,1:PRINT "      ";
  28. 190  IF X$="S" THEN GOSUB 1830:B7!=3*RND(0):LOCATE 25,1,1:PRINT "SELF-PLAYING";: GOSUB 2480:GOTO 100
  29. 195  LOCATE 25,1,1:PRINT "MOVE "+CHR$(7);B$;:GOSUB 1590:D=0:B4=A:B9=B:B5=0:IF A(X,Y)=2 AND Y=5 AND B=6 AND A(A,B)=1 AND ABS(A-X)=1 THEN B5=1:GOTO 220
  30. 200  IF X$="K" OR X$="Q" THEN GOSUB 900:LOCATE 25,1,0:PRINT STRING$(14," ");:        GOTO 100
  31. 210  IF X$="S" THEN CL$="N":GOTO 190:ELSE A0=3:GOSUB 250:                            IF D=0 THEN LOCATE 25,31,0:PRINT "ILLEGAL       ";:GOTO 190
  32. 220  LOCATE 25,31,1:PRINT "OK            ";:A=B4:B=B9:A(A,B)=A(X,Y):A(X,Y)=1:        GOSUB 910:X=A:Y=B:GOSUB 910:IF N$="N" THEN GOSUB 900:N$=" "
  33. 230  IF A(A,B)=2 AND B=8 THEN LOCATE 25,31,1:PRINT "WHAT PIECE";:GOSUB 2100:         X=A:Y=B:GOSUB 910:LOCATE 25,31,1:PRINT "              ";
  34. 240  IF B5=1 THEN A(A,B-1)=1:X=A:Y=B-1:GOSUB 910:GOTO 100:ELSE GOTO 100
  35. 250  LOCATE 1,78,0:PRINT "$ ";:                                                      ON A(X,Y) GOTO 0, 480, 0, 380, 330, 0, 280, 0, 330:GOTO 460
  36. 270  ON -A(X,Y) GOTO 0, 530, 0, 380, 330, 0, 280, 0, 330:GOTO 460
  37. 280  B=Y:FOR A=X+1 TO 8:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 290
  38. 290  FOR A=X-1 TO 1 STEP -1:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 300
  39. 300  A=X:FOR B=Y+1 TO 8:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 310
  40. 310  FOR B=Y-1 TO 1 STEP -1:GOSUB 640:IF S=0 THEN NEXT:RETURN ELSE RETURN
  41. 330  B=Y:FOR A=X+1 TO 8:B=B+1:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 340
  42. 340  B=Y:FOR A=X-1 TO 1 STEP -1:B=B-1:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 350
  43. 350  B=Y:FOR A=X-1 TO 1 STEP -1:B=B+1:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 360
  44. 360  B=Y:FOR A=X+1 TO 8:B=B-1:GOSUB 640: IF S=0 THEN NEXT ELSE GOTO 370
  45. 370  IF ABS(A(X,Y))=9 THEN GOTO 280:ELSE RETURN
  46. 380  A=X+2:B=Y+1:IF A<9 AND B<9 THEN GOSUB 650 ELSE GOTO 390
  47. 390  B=B-2:IF B>0 AND A<9 THEN GOSUB 650 ELSE GOTO 400
  48. 400  A=A-4:IF A>0 AND B>0 THEN GOSUB 650 ELSE GOTO 410
  49. 410  B=B+2:IF B<9 AND A>0 THEN GOSUB 650 ELSE GOTO 420
  50. 420  A=A+1:B=B+1:IF A>0 AND A<9 AND B<9 THEN GOSUB 650 ELSE GOTO 430
  51. 430  B=B-4:IF B>0 AND A>0 AND A<9 THEN GOSUB 650 ELSE GOTO 440
  52. 440  A=A+2:IF A>0 AND A<9 AND B>0 THEN GOSUB 650 ELSE GOTO 450
  53. 450  B=B+4:IF B<9 AND A>0 AND A<9 THEN GOSUB 650:RETURN ELSE RETURN
  54. 460  FOR A=X-1 TO X+1:FOR B=Y-1 TO Y+1:IF A(A,B)<>0 THEN GOSUB 650
  55. 470  NEXT:NEXT:RETURN
  56. 480  A=X:IF Y>2 THEN GOTO 500 ELSE GOTO 490
  57. 490  B=Y+1:IF A(A,B)=1 THEN GOSUB 660:B=B+1:IF A(A,B)=1 THEN GOSUB 660:GOTO 510:     ELSE GOTO 510:ELSE GOTO 510
  58. 500  B=Y+1:IF A(A,B)=1 THEN GOSUB 660 ELSE GOTO 510
  59. 510  A=X+1:B=Y+1:IF A(A,B)<0 THEN GOSUB 660 ELSE GOTO 520
  60. 520  A=A-2:IF A(A,B)<0 THEN GOSUB 660:RETURN:ELSE RETURN
  61. 530  A=X:IF Y<7 THEN GOTO 550 ELSE GOTO 540
  62. 540  B=Y-1:IF A(A,B)=1 THEN GOSUB 660:B=B-1:IF A(A,B)=1 THEN GOSUB 660:GOTO 560:     ELSE GOTO 560:ELSE GOTO 560
  63. 550  B=Y-1:IF A(A,B)=1 THEN GOSUB 660 ELSE GOTO 560
  64. 560  A=X-1:B=Y-1:IF A(A,B)>1 THEN GOSUB 660 ELSE GOTO 570
  65. 570  A=A+2:IF A(A,B)>1 THEN GOSUB 660:RETURN:ELSE GOTO 590
  66. 580  T=A(A,B):IF T=-99 THEN B1=T:RETURN:ELSE GOTO 590
  67. 590  A5=S:IF ABS(T)<=A(X,Y) THEN A(A,B)=A(X,Y):A(X,Y)=1:GOTO 610:ELSE GOTO 600
  68. 600  IF T<B1 THEN B1=T:S=A5:RETURN:ELSE S=A5:RETURN
  69. 610  A1=X:A2=Y:A3=A:A4=B:A8=T:A0=2:FOR X=1 TO 8:FOR Y=1 TO 8:                        IF A(X,Y)<0 THEN GOSUB 270:IF T=0 THEN GOTO 630
  70. 620  NEXT:NEXT
  71. 630  X=A1:Y=A2:A=A3:B=A4:A0=5:A(X,Y)=A(A,B):A(A,B)=A8:GOTO 600
  72. 640  S=0:IF A(A,B)=1 THEN GOTO 660 ELSE IF A(A,B)=0 THEN S=1:RETURN:                 ELSE IF SGN(A(A,B))=SGN(A(X,Y)) THEN S=1:RETURN:ELSE S=1:GOTO 660
  73. 650  IF A(A,B)=1 THEN GOTO 660 ELSE IF SGN(A(A,B))=SGN(A(X,Y)) THEN RETURN:          ELSE GOTO 660
  74. 660  LOCATE 1,78,0:PRINT "  ";:ON A0 GOTO 670, 680, 690, 700, 710:GOTO 720
  75. 670  IF A6=A AND A7=B THEN B1=B1+1:RETURN:ELSE RETURN
  76. 680  IF A3=A AND A4=B THEN T=0:RETURN:ELSE RETURN
  77. 690  IF B4=A AND B9=B THEN D=1:RETURN:ELSE RETURN
  78. 700  IF A6=A AND A7=B THEN C=1:RETURN:ELSE RETURN
  79. 710  IF A(A,B)<0 THEN GOTO 580 ELSE RETURN
  80. 720  B3=S:W=X:M=Y:N=A:H=B:P=A(A,B):A(A,B)=A(X,Y):A(X,Y)=1:B1=0
  81. 730  A0=5:FOR X=1 TO 8:FOR Y=1 TO 8:IF A(X,Y)>1 THEN GOSUB 250
  82. 740  NEXT:NEXT:X=N:Y=H:A0=1:GOSUB 270:A0=0:S=B3:X=W:Y=M:A=N:B=H:A(X,Y)=A(A,B):       A(A,B)=P
  83. 750  B6!=1/(ABS(4.5-A)+ABS(4.5-B)+1):IF A(X,Y)<-2 AND A(X,Y)>-9 THEN                 B6!=B6!+1/(ABS(A6-A)+ABS(A7-B)+5)+RND(0)/15
  84. 760  G!=P+B1+B6!:IF P=99 THEN GOSUB 900:                                             LOCATE 25,1,1:PRINT "MATE ";B$;:GOTO 2190
  85. 770  IF G!<=F! THEN RETURN
  86. 780  F!=G!:E=X:Q=Y:R=A:U=B:RETURN
  87. 790  CLS
  88. 800  Y=0:FOR J=896 TO 0 STEP -128:Y=Y+1:X=0:FOR K=J TO 42+J STEP 6:X=X+1:            T(X,Y)=K:NEXT:NEXT
  89. 810  Y=0:FOR J=960 TO 64 STEP -128:Y=Y+1:X=0:FOR K=J TO 42+J STEP 6:X=X+1:            B(X,Y)=K:NEXT:NEXT
  90. 820  DATA -7, -4, -5, -9, -99, -5, -4, -7
  91. 830  DATA -2, -2, -2, -2, -2, -2, -2, -2
  92. 840  DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
  93. 850  DATA 2, 2, 2, 2, 2, 2, 2, 2
  94. 860  DATA 7, 4, 5, 9, 99, 5, 4, 7
  95. 870  FOR Y=8 TO 1 STEP -1:FOR X=1 TO 7 STEP 2:S(X,Y)=I:S(X+1,Y)=-I:NEXT:I=-I:NEXT
  96. 880  FOR Y=8 TO 1 STEP -1:FOR X=1 TO 8:READ A(X,Y):NEXT:NEXT:RETURN
  97. 890  I=-I:A(4,1)=99:A(5,1)=9:A(4,8)=-99:A(5,8)=-9
  98. 900  FOR Y=1 TO 8:FOR X=1 TO 8:GOSUB 910:NEXT:NEXT:RETURN
  99. 910  IF S(X,Y)>0 THEN GOTO 940
  100. 920  ON ABS(A(X,Y)) GOSUB 980, 1040, 0, 1340, 1440, 0, 1540, 0, 1140                   :IF ABS(A(X,Y))=99 THEN GOSUB 1240:RETURN ELSE RETURN
  101. 940  ON ABS(A(X,Y)) GOSUB 960, 990, 0, 1290, 1390, 0, 1490, 0, 1090                    :IF ABS(A(X,Y))=99 THEN GOSUB 1190:RETURN ELSE RETURN
  102. 960  IF S(X,Y)<0 THEN GOTO 980
  103. 970  LOCATE 25-Y*3,X*8+1,0
  104. 971  PRINT STRING$(8,CHR$(219));
  105. 972  LOCATE 26-Y*3,X*8+1,0
  106. 973  PRINT STRING$(8,CHR$(219));
  107. 974  LOCATE 27-Y*3,X*8+1,0
  108. 975  PRINT STRING$(8,CHR$(219));:RETURN
  109. 980  LOCATE 25-Y*3,X*8+1,0
  110. 981  PRINT STRING$(8," ");
  111. 982  LOCATE 26-Y*3,X*8+1,0
  112. 983  PRINT STRING$(8," ");
  113. 984  LOCATE 27-Y*3,X*8+1,0
  114. 985  PRINT STRING$(8," ");:RETURN
  115. 990  IF I*A(X,Y)<0 THEN GOTO 1020
  116. 1000  LOCATE 25-Y*3,X*8+1,0
  117. 1001  PRINT STRING$(8,CHR$(219));
  118. 1010  LOCATE 26-Y*3,X*8+1,0
  119. 1011  PRINT STRING$(3,CHR$(219));CHR$(2);STRING$(4,CHR$(219));
  120. 1012  LOCATE 27-Y*3,X*8+1,0
  121. 1013  PRINT STRING$(8,CHR$(219)):RETURN
  122. 1020  LOCATE 25-Y*3,X*8+1,0
  123. 1021  PRINT STRING$(8,CHR$(219));
  124. 1030  LOCATE 26-Y*3,X*8+1,0
  125. 1031  PRINT STRING$(3,CHR$(219));CHR$(1);STRING$(4,CHR$(219));
  126. 1032  LOCATE 27-Y*3,X*8+1,0
  127. 1033  PRINT STRING$(8,CHR$(219));:RETURN
  128. 1040  IF I*A(X,Y)<0 THEN GOTO 1070
  129. 1050  LOCATE 25-Y*3,X*8+1,0
  130. 1051  PRINT STRING$(8,CHR$(32));
  131. 1060  LOCATE 26-Y*3,X*8+1,0
  132. 1061  PRINT STRING$(3,CHR$(32));CHR$(2);STRING$(4,CHR$(32));
  133. 1062  LOCATE 27-Y*3,X*8+1,0
  134. 1063  PRINT STRING$(8,CHR$(32)):RETURN
  135. 1070  LOCATE 25-Y*3,X*8+1,0
  136. 1071  PRINT STRING$(8,CHR$(32));
  137. 1080  LOCATE 26-Y*3,X*8+1,0
  138. 1081  PRINT STRING$(3,CHR$(32));CHR$(1);STRING$(4,CHR$(32));
  139. 1082  LOCATE 27-Y*3,X*8+1,0
  140. 1083  PRINT STRING$(8,CHR$(32));:RETURN
  141. 1090  IF I*A(X,Y)<0 THEN GOTO 1120
  142. 1100  LOCATE 25-Y*3,X*8+1,0
  143. 1101  PRINT STRING$(2,CHR$(219));STRING$(3,CHR$(178));STRING$(3,CHR$(219));
  144. 1110  LOCATE 26-Y*3,X*8+1,0
  145. 1111  PRINT CHR$(219)+"QUEEN"+CHR$(219);CHR$(219);
  146. 1112  LOCATE 27-Y*3,X*8+1,0
  147. 1113  PRINT STRING$(2,CHR$(219));STRING$(3,CHR$(178));STRING$(3,CHR$(219));          :RETURN
  148. 1120  LOCATE 25-Y*3,X*8+1,0
  149. 1121  PRINT STRING$(2,CHR$(219));STRING$(3,CHR$(176));STRING$(3,CHR$(219));
  150. 1130  LOCATE 26-Y*3,X*8+1,0
  151. 1131  PRINT CHR$(219)+"QUEEN"+CHR$(219);CHR$(219);
  152. 1132  LOCATE 27-Y*3,X*8+1,0
  153. 1133  PRINT STRING$(2,CHR$(219));STRING$(3,CHR$(176));STRING$(3,CHR$(219));          :RETURN
  154. 1140  IF I*A(X,Y)<0 THEN GOTO 1170
  155. 1150  LOCATE 25-Y*3,X*8+1,0
  156. 1151  PRINT STRING$(2,CHR$(32));STRING$(3,CHR$(178));STRING$(3,CHR$(32));
  157. 1160  LOCATE 26-Y*3,X*8+1,0
  158. 1161  PRINT CHR$(32)+"QUEEN"+CHR$(32);CHR$(32);
  159. 1162  LOCATE 27-Y*3,X*8+1,0
  160. 1163  PRINT STRING$(2,CHR$(32));STRING$(3,CHR$(178));STRING$(3,CHR$(32));            :RETURN
  161. 1170  LOCATE 25-Y*3,X*8+1,0
  162. 1171  PRINT STRING$(2,CHR$(32));STRING$(3,CHR$(176));STRING$(3,CHR$(32));
  163. 1180  LOCATE 26-Y*3,X*8+1,0
  164. 1181  PRINT CHR$(32)+"QUEEN"+CHR$(32);CHR$(32);
  165. 1182  LOCATE 27-Y*3,X*8+1,0
  166. 1183  PRINT STRING$(2,CHR$(32));STRING$(3,CHR$(176));STRING$(3,CHR$(32));            :RETURN
  167. 1190  IF I*A(X,Y)<0 THEN GOTO 1220
  168. 1200  LOCATE 25-Y*3,X*8+1,0
  169. 1201  PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(178));STRING$(2,CHR$(219));
  170. 1210  LOCATE 26-Y*3,X*8+1,0
  171. 1211  PRINT CHR$(219);CHR$(178)+"KING"+CHR$(178);CHR$(219);
  172. 1212  LOCATE 27-Y*3,X*8+1,0
  173. 1213  PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(178));STRING$(2,CHR$(219));          :RETURN
  174. 1220  LOCATE 25-Y*3,X*8+1,0
  175. 1221  PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(176));STRING$(2,CHR$(219));
  176. 1230  LOCATE 26-Y*3,X*8+1,0
  177. 1231  PRINT CHR$(219);CHR$(176)+"KING"+CHR$(176);CHR$(219);
  178. 1232  LOCATE 27-Y*3,X*8+1,0
  179. 1233  PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(176));STRING$(2,CHR$(219));          :RETURN
  180. 1240  IF I*A(X,Y)<0 THEN GOTO 1270
  181. 1250  LOCATE 25-Y*3,X*8+1,0
  182. 1251  PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(178));STRING$(2,CHR$(32));
  183. 1260  LOCATE 26-Y*3,X*8+1,0
  184. 1261  PRINT CHR$(32);CHR$(178)+"KING"+CHR$(178);CHR$(32);
  185. 1262  LOCATE 27-Y*3,X*8+1,0
  186. 1263  PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(178));STRING$(2,CHR$(32));            :RETURN
  187. 1270  LOCATE 25-Y*3,X*8+1,0
  188. 1271  PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(176));STRING$(2,CHR$(32));
  189. 1280  LOCATE 26-Y*3,X*8+1,0
  190. 1281  PRINT CHR$(32);CHR$(176)+"KING"+CHR$(176);CHR$(32);
  191. 1282  LOCATE 27-Y*3,X*8+1,0
  192. 1283  PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(176));STRING$(2,CHR$(32));            :RETURN
  193. 1290  IF I*A(X,Y)<0 THEN GOTO 1320
  194. 1300  LOCATE 25-Y*3,X*8+1,0
  195. 1301  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(178));STRING$(3,CHR$(219));
  196. 1310  LOCATE 26-Y*3,X*8+1,0
  197. 1311  PRINT CHR$(219)+"KNIGHT"+CHR$(219);
  198. 1312  LOCATE 27-Y*3,X*8+1,0
  199. 1313  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(178));STRING$(3,CHR$(219));          :RETURN
  200. 1320  LOCATE 25-Y*3,X*8+1,0
  201. 1321  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(176));STRING$(3,CHR$(219));
  202. 1330  LOCATE 26-Y*3,X*8+1,0
  203. 1331  PRINT CHR$(219)+"KNIGHT"+CHR$(219);
  204. 1332  LOCATE 27-Y*3,X*8+1,0
  205. 1333  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(176));STRING$(3,CHR$(219));          :RETURN
  206. 1340  IF I*A(X,Y)<0 THEN GOTO 1370
  207. 1350  LOCATE 25-Y*3,X*8+1,0
  208. 1351  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(178));STRING$(3,CHR$(32));
  209. 1360  LOCATE 26-Y*3,X*8+1,0
  210. 1361  PRINT CHR$(32)+"KNIGHT"+CHR$(32);
  211. 1362  LOCATE 27-Y*3,X*8+1,0
  212. 1363  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(178));STRING$(3,CHR$(32));            :RETURN
  213. 1370  LOCATE 25-Y*3,X*8+1,0
  214. 1371  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(176));STRING$(3,CHR$(32));
  215. 1380  LOCATE 26-Y*3,X*8+1,0
  216. 1381  PRINT CHR$(32)+"KNIGHT"+CHR$(32);
  217. 1382  LOCATE 27-Y*3,X*8+1,0
  218. 1383  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(176));STRING$(3,CHR$(32));            :RETURN
  219. 1390  IF I*A(X,Y)<0 THEN GOTO 1420
  220. 1400  LOCATE 25-Y*3,X*8+1,0
  221. 1401  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(178));STRING$(3,CHR$(219));
  222. 1410  LOCATE 26-Y*3,X*8+1,0
  223. 1411  PRINT CHR$(219)+"BISHOP"+CHR$(219);
  224. 1412  LOCATE 27-Y*3,X*8+1,0
  225. 1413  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(178));STRING$(3,CHR$(219));          :RETURN
  226. 1420  LOCATE 25-Y*3,X*8+1,0
  227. 1421  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(176));STRING$(3,CHR$(219));
  228. 1430  LOCATE 26-Y*3,X*8+1,0
  229. 1431  PRINT CHR$(219)+"BISHOP"+CHR$(219);
  230. 1432  LOCATE 27-Y*3,X*8+1,0
  231. 1433  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(176));STRING$(3,CHR$(219));          :RETURN
  232. 1440  IF I*A(X,Y)<0 THEN GOTO 1470
  233. 1450  LOCATE 25-Y*3,X*8+1,0
  234. 1451  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(178));STRING$(3,CHR$(32));
  235. 1460  LOCATE 26-Y*3,X*8+1,0
  236. 1461  PRINT CHR$(32)+"BISHOP"+CHR$(32);
  237. 1462  LOCATE 27-Y*3,X*8+1,0
  238. 1463  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(178));STRING$(3,CHR$(32));            :RETURN
  239. 1470  LOCATE 25-Y*3,X*8+1,0
  240. 1471  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(176));STRING$(3,CHR$(32));
  241. 1480  LOCATE 26-Y*3,X*8+1,0
  242. 1481  PRINT CHR$(32)+"BISHOP"+CHR$(32);
  243. 1482  LOCATE 27-Y*3,X*8+1,0
  244. 1483  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(176));STRING$(3,CHR$(32));            :RETURN
  245. 1490  IF I*A(X,Y)<0 THEN GOTO 1520
  246. 1500  LOCATE 25-Y*3,X*8+1,0
  247. 1501  PRINT CHR$(219);CHR$(219);CHR$(178);CHR$(219);CHR$(219);CHR$(178);              CHR$(219);CHR$(219);
  248. 1510  LOCATE 26-Y*3,X*8+1,0
  249. 1511  PRINT CHR$(219);CHR$(219)+"ROOK"+CHR$(219);CHR$(219);
  250. 1512  LOCATE 27-Y*3,X*8+1,0
  251. 1513  PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(178));STRING$(2,CHR$(219));          :RETURN
  252. 1520  LOCATE 25-Y*3,X*8+1,0
  253. 1521  PRINT CHR$(219);CHR$(219);CHR$(176);CHR$(219);CHR$(219);CHR$(176);              CHR$(219);CHR$(219);
  254. 1530  LOCATE 26-Y*3,X*8+1,0
  255. 1531  PRINT CHR$(219);CHR$(219)+"ROOK"+CHR$(219);CHR$(219);
  256. 1532  LOCATE 27-Y*3,X*8+1,0
  257. 1533  PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(176));STRING$(2,CHR$(219));          :RETURN
  258. 1540  IF I*A(X,Y)<0 THEN GOTO 1570
  259. 1550  LOCATE 25-Y*3,X*8+1,0
  260. 1551  PRINT CHR$(32);CHR$(32);CHR$(178);CHR$(32);CHR$(32);CHR$(178);                  CHR$(32);CHR$(32);
  261. 1560  LOCATE 26-Y*3,X*8+1,0
  262. 1561  PRINT CHR$(32);CHR$(32)+"ROOK"+CHR$(32);CHR$(32);
  263. 1562  LOCATE 27-Y*3,X*8+1,0
  264. 1563  PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(178));STRING$(2,CHR$(32));            :RETURN
  265. 1570  LOCATE 25-Y*3,X*8+1,0
  266. 1571  PRINT CHR$(32);CHR$(32);CHR$(176);CHR$(32);CHR$(32);CHR$(176);                  CHR$(32);CHR$(32);
  267. 1580  LOCATE 26-Y*3,X*8+1,0
  268. 1581  PRINT CHR$(32);CHR$(32)+"ROOK"+CHR$(32);CHR$(32);
  269. 1582  LOCATE 27-Y*3,X*8+1,0
  270. 1583  PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(176));STRING$(2,CHR$(32));            :RETURN
  271. 1590  LOCATE 25,31,1:PRINT STRING$(10," ");
  272. 1600  X$=INKEY$:IF X$="N" THEN N$=X$
  273. 1610  IF X$>="A" AND X$<="H" THEN X=VAL(CHR$(ASC(X$)-16)):GOTO 1730
  274. 1620  IF X$="N" THEN GOSUB 2030
  275. 1630  IF X$="K" AND A(5,1)=99 AND A(8,1)=7 THEN A(5,1)=1:A(8,1)=1:A(7,1)=99          :A(6,1)=7:GOTO 1800
  276. 1640  IF X$="Q" AND A(5,1)=99 AND A(1,1)=7 THEN A(5,1)=1:A(1,1)=1:A(3,1)=99          :A(4,1)=7:GOTO 1800
  277. 1650  IF X$="K" AND A(4,1)=99 AND A(1,1)=7 THEN A(4,1)=1:A(1,1)=1:A(2,1)=99          :A(3,1)=7:GOTO 1800
  278. 1660  IF X$="Q" AND A(4,1)=99 AND A(8,1)=7 THEN A(4,1)=1:A(8,1)=1:A(6,1)=99          :A(5,1)=7:GOTO 1800
  279. 1670  IF X$="X" THEN GOSUB 1830:LOCATE 25,1,0:PRINT "EXCHANGING         ";           :GOSUB 2480:IF CL$="Y" THEN LOCATE 25,50,0:PRINT "START ";TIME$;:GOTO 100       :ELSE:GOTO 100
  280. 1680  IF X$="S" THEN GOTO 1820
  281. 1690  IF X$="M" THEN GOSUB 1840
  282. 1700  IF X$="I" THEN GOSUB 2220:CLS:GOSUB 900:LOCATE 25,1,1                          :PRINT "MOVE "+CHR$(7);B$;
  283. 1710  IF X$="L" THEN GOSUB 2040
  284. 1720  GOTO 1600
  285. 1730  LOCATE 25,21,1:PRINT X$;:LOCATE 25,31,1:PRINT "            ";
  286. 1740  Y=VAL(INKEY$):IF Y=0 THEN GOTO 1740
  287. 1750  LOCATE 25,22,1:PRINT Y;:LOCATE 25,25,1:PRINT "-";
  288. 1760  IF A(X,Y)<2 OR A(X,Y)>99 THEN LOCATE 25,31,1:PRINT "ENTRY ERROR ";             :GOTO 1590
  289. 1770  A$=INKEY$:IF A$<"A" OR A$>"H" THEN GOTO 1770 ELSE A=VAL(CHR$(ASC(A$)-16))
  290. 1780  LOCATE 25,27,1:PRINT A$;
  291. 1790  B=VAL(INKEY$):IF B=0 THEN GOTO 1790 ELSE LOCATE 25,28,1:PRINT B;
  292. 1800  IF X$="K" OR X$="Q" THEN LOCATE 25,20,1:PRINT "CSTL. ";X$;"-SIDE";             :GOSUB 1830 ELSE GOSUB 1830
  293. 1810  IF CL$="Y" THEN LOCATE 25,50,0:PRINT "START ";TIME$;
  294. 1820  RETURN
  295. 1830  LOCATE 25,1,1:PRINT STRING$(79," ");:RETURN
  296. 1840  GOSUB 1830:LOCATE 25,1,1:PRINT "MODIFYING          ";
  297. 1850  GOSUB 2010:IF M$<"A" OR M$>"H" THEN GOTO 1850
  298. 1860  X=VAL(CHR$(ASC(M$)-16)):LOCATE 25,21,1:PRINT M$;
  299. 1870  M$=INKEY$:IF M$<"1" OR M$>"8" THEN GOTO 1870
  300. 1880  Y=VAL(M$):LOCATE 25,23,1:PRINT M$;" = ";
  301. 1890  M$=INKEY$:IF M$="C" OR M$="P" OR M$="E" THEN S1$=M$:LOCATE 25,27,1             :PRINT M$;:ELSE GOTO 1890
  302. 1900  M$=INKEY$:IF M$="S" OR M$="P" OR M$="N" OR M$="B" OR M$="R" OR M$="Q" OR        M$="K" THEN V$=M$:LOCATE 25,29,1:PRINT M$; ELSE GOTO 1900
  303. 1910  IF V$="P" THEN V1=2
  304. 1920  IF V$="N" THEN V1=4
  305. 1930  IF V$="B" THEN V1=5
  306. 1940  IF V$="R" THEN V1=7
  307. 1950  IF V$="Q" THEN V1=9
  308. 1960  IF V$="K" THEN V1=99
  309. 1970  IF V$="S" THEN V1=1
  310. 1980  IF S1$="C" AND V1<>1 THEN V1=-V1
  311. 1990  A(X,Y)=V1:IF S1$="E" THEN A(X,Y)=1
  312. 2000  GOSUB 910:GOTO 1840
  313. 2010  M$=INKEY$:IF M$="N" THEN GOSUB 2030:GOTO 2010:ELSE IF M$="Z" THEN               GOSUB 1830:LOCATE 25,20,1:PRINT "         ";:GOSUB 900:ELSE RETURN
  314. 2020  IF CL$="Y" THEN LOCATE 25,51,0:PRINT "START ";TIME$;:GOTO 100 ELSE GOTO 100
  315. 2030  FOR J=1 TO 8:FOR K=1 TO 8:K$=STR$(K)
  316. 2031  LOCATE 27-K*3,J*8+1,0
  317. 2032  PRINT CHR$(J+64);RIGHT$(K$,1);:NEXT:NEXT:RETURN
  318. 2040  GOSUB 1830:LOCATE 25,20,1:PRINT "LEVEL=";B8!;:PRINT "CHANGE LEVELS?";
  319. 2050  C$=INKEY$:IF C$="N" THEN GOTO 2090 ELSE IF C$="Y" THEN LOCATE 25,27,1          :PRINT "       ";:GOSUB 1830:ELSE GOTO 2050
  320. 2060  L1$=INKEY$:IF L1$="" THEN GOTO 2060 ELSE IF L1$>="0" AND L1$<="9" THEN          LOCATE 25,27,1:PRINT L1$;:ELSE GOTO 2060
  321. 2070  L2$=INKEY$:IF L2$="" THEN GOTO 2070 ELSE IF L2$<"0" OR L2$>"9" THEN L2$=L1$    :L1$="0"
  322. 2080  B8!=VAL(L1$)*10+VAL(L2$):B7!=B8!/2:LOCATE 25,27,0:PRINT L1$;L2$;
  323. 2090  GOSUB 1830:LOCATE 25,20,0:PRINT "              ";:LOCATE 25,1,1                :PRINT "MOVE ";B$;:RETURN
  324. 2100  REM *** PROMOTION ROUTINE ***
  325. 2110  LOCATE 2,1,1:PRINT "P, N, B, R, Q ";
  326. 2120  Z$=INKEY$:IF Z$="P" THEN A(A,B)=2:GOTO 2180
  327. 2130  IF Z$="N" THEN A(A,B)=4:GOTO 2180
  328. 2140  IF Z$="B" THEN A(A,B)=5:GOTO 2180
  329. 2150  IF Z$="R" THEN A(A,B)=7:GOTO 2180
  330. 2160  IF Z$="Q" THEN A(A,B)=9:GOTO 2180
  331. 2170  GOTO 2120
  332. 2180  RETURN
  333. 2190  IF CL$="Y" THEN LOCATE 25,61,1:PRINT "STOP ";TIME$;
  334. 2200  LOCATE 25,1,1:PRINT "HIT (P) TO PLAY OR HIT (B) FOR BASIC";
  335. 2210  A$=INKEY$:IF A$="" THEN GOTO 2210 ELSE IF A$="B" THEN CLS:END                   ELSE IF A$="P" THEN RUN ELSE GOTO 2210
  336. 2220  CLS
  337. 2221  PRINT "1. USE LIST TO INSURE LOADED RIGHT, THE LAST LINE IS 65529 "
  338. 2230  PRINT "2. ALSE NOTE MEMORY SIZE AS A DOUBLE CHECK "
  339. 2240  PRINT "3. SPECIAL COMMANDS DURING PLAYER'S MOVE ARE:"
  340. 2250  PRINT "   TYPE 'N' - TO NUMBER THE BOARD "
  341. 2260  PRINT "        'K' - TO CASTLE KING SIDE "
  342. 2270  PRINT "        'Q' - TO CASTLE QUEEN SIDE "
  343. 2280  PRINT "        'X' - TO EXCHANGE PIECES AND LET COMPUTER MOVE"
  344. 2290  PRINT "        'S' - TO LET THE COMPUTER PLAY BY ITSELF "
  345. 2300  PRINT "        'M' - TO MODIFY THE BOARD, ENTER THE SQUARE FOLLOWED BY"
  346. 2310  PRINT "                 C, P, OR E  FOR COMPUTER, PLAYER, OR EMPTY"
  347. 2320  PRINT "                 AND S,P,N,B,R,Q,K  FOR SQUARE,PAWN, ETC..."
  348. 2330  PRINT "        'Z' - TO ESCAPE MODIFY AND LET COMPUTER MOVE"
  349. 2340  PRINT "        'I' - TO GET INSTRUCTIONS AGAIN"
  350. 2350  PRINT "        'L' - TO LOOK AT OR CHANGE LEVEL OF PLAY"
  351. 2360  REM ********************************************************************
  352. 2370  INPUT "HIT ENTER TO CONTINUE";EN$:PRINT
  353. 2380  PRINT "4. TO PROMOTE TO P,N,B,R,Q ENTER THE LETTER WHEN PROMOTED"
  354. 2390  PRINT "5. TO CAPTURE 'EN PASSANT' SPECIFY THE 'FROM' - 'TO' SQUARES"
  355. 2400  PRINT "6. LEVELS OF PLAY ARE FROM 01 TO 24"
  356. 2410  PRINT "7. COMPUTER ASSUMES MATE IF KING IS LEFT IN CHECK SO BE SURE TO "
  357. 2411  PRINT "    WATCH FOR CHECK MESSAGE"
  358. 2420  PRINT "8. IF A MOVE IS ILLEGAL OR AN ENTRY ERROR IS MADE SIMPLY TYPE IN"
  359. 2421  PRINT "    A NEW MOVE.  A MOVE MAY BE STARTED OVER BY FORCING AN ERROR. (E.G. '9')."
  360. 2430  PRINT "9. IF <BREAK> IS HIT DURING THE GAME, TYPE 'GOSUB 900:CONT' TO"
  361. 2435  PRINT "    DRAW BOARD AND CONTINUE"
  362. 2440  PRINT "10. YOU HAVE A CHOICE OF BLACK OR WHITE, THE COMPUTER WILL ALWAYS"
  363. 2441  PRINT "     BE AT THE TOP OF THE SCREEN"
  364. 2450  PRINT:PRINT:INPUT "HIT ENTER TO CONTINUE GAME";EN$
  365. 2460  RETURN
  366. 2480  I=-I:GOSUB 2490:GOSUB 900:RETURN
  367. 2490  L=0:FOR J=1 TO 8:FOR K=1 TO 8:L=L+1:IF A(J,K)<>1 THEN C(L)=-A(J,K)             :ELSE C(L)=A(J,K)
  368. 2500  NEXT:NEXT
  369. 2510  L=65:FOR J=1 TO 8: FOR K=1 TO 8:L=L-1:A(J,K)=C(L):NEXT:NEXT
  370. 2520  RETURN
  371. 65529  END
  372.